package com.mixsmart.web.controller;

import java.util.HashMap;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.mixsmart.commonweb.bean.entity.TCDict;
import com.mixsmart.commonweb.service.impl.DictService;
import com.mixsmart.core.bean.MixResponse;
import com.mixsmart.core.service.IResQueryService;
import com.mixsmart.utils.StringUtils;

/**
 * 数据字典--控制器
 * @author lmq
 * @version 1.0
 * @since JDK版本大于等于1.6
 * 2016年3月8日
 */
@Controller
@RequestMapping("/dict")
public class DictController extends BaseWebController {

	private static final String VIEW_DIR = WEB_BASE_VIEW_DIR+"/dict/";
	
	@Autowired
	private IResQueryService resQueryServ;
	@Autowired
	private DictService dictServ;
	
	/**
	 * 获取数据字典中的子项
	 * @param busiValue 业务值（即：要获取的数据；如：获取是否数据；则该值为："yes_or_no"）
	 * @return 返回MixResponse对象的JSON格式数据；如果成功result等于“1”，负责result为非1值
	 */
	@RequestMapping("/items/{busiValue}.do")
	@ResponseBody
	public MixResponse<Object> items(@PathVariable String busiValue) {
		HashMap<String, Object> params = new HashMap<String, Object>();
		params.put("strValue", busiValue);
		MixResponse<Object> mixResp = resQueryServ.getDatas("dict_items", params);
		return mixResp;
	}
	
	/**
	 * 添加数据字典视图页面
	 * @param id 选中数据字典ID（即：父节点）
	 * @return 返回添加数据字典视图
	 */
	@RequestMapping("/add.do")
	public ModelAndView add(String id) {
		ModelAndView modelView = new ModelAndView();
		ModelMap modelMap = modelView.getModelMap();
		modelMap.put("sortNum", dictServ.getSortNum(id));
		modelView.setViewName(VIEW_DIR+"add");
		return modelView;
	}
	
	/**
	 * 保存数据字典数据（只能以post提交的方式请求）
	 * @param session HttpSession对象
	 * @param dict 数据字典实体对象
	 * @return 返回MixResponse对象（即：操作结果，以JSON格式的形式返回数据）
	 */
	@RequestMapping(value="/save.do",method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<TCDict> save(HttpSession session, TCDict dict) {
		MixResponse<TCDict> mixResp = new MixResponse<TCDict>();
		if(null != dict && StringUtils.isNotEmpty(dict.getName()) && 
				StringUtils.isNotEmpty(dict.getStrValue())) {
			try {
				if(dictServ.save(dict)) {
					mixResp.setData(dict);
					mixResp.setResult(OP_SUCCESS);
					mixResp.setMsg(OP_SUCCESS_MSG);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return mixResp;
	}
	
	/**
	 * 编辑视图页面
	 * @param id 选中ID（即：要修改的数据）
	 * @return 返回编辑视图
	 */
	@RequestMapping("/edit.do")
	public ModelAndView edit(String id) {
		ModelAndView modelView = new ModelAndView();
		ModelMap modelMap = modelView.getModelMap();
		modelMap.put("objBean", dictServ.find(id));
		modelView.setViewName(VIEW_DIR+"edit");
		return modelView;
	}
	
	/**
	 * 修改数据字典数据（只能以post提交的方式请求）
	 * @param session HttpSession对象
	 * @param dict 实体对象
	 * @return 返回MixResponse对象（即：操作结果，以JSON格式的形式返回数据）
	 */
	@RequestMapping(value="/update.do",method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<TCDict> update(HttpSession session, TCDict dict) {
		MixResponse<TCDict> mixResp = new MixResponse<TCDict>();
		if(null != dict && StringUtils.isNotEmpty(dict.getId()) && 
				StringUtils.isNotEmpty(dict.getName()) && 
				StringUtils.isNotEmpty(dict.getStrValue()) ) {
			try {
				if(dictServ.update(dict)) {
					mixResp.setResult(OP_SUCCESS);
					mixResp.setMsg(OP_SUCCESS_MSG);
					mixResp.setData(dict);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return mixResp;
	}
	
	/**
	 * 删除数据字典数据（只能以post提交的方式请求）
	 * @param id 主键ID；多个id之间用英文逗号“,”分隔
	 * @return 返回MixResponse对象（即：操作结果，以JSON格式的形式返回数据）
	 */
	@RequestMapping(value="/delete.do",method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<String> delete(String id) {
		MixResponse<String> mixResp = new MixResponse<String>();
		if(StringUtils.isNotEmpty(id)) {
			try {
				if(dictServ.delete(id)) {
					mixResp.setResult(OP_SUCCESS);
					mixResp.setMsg(OP_SUCCESS_MSG);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return mixResp;
	}
	
}
